import numpy as np

def numpy_to_python(obj):
    # 如果对象是字典，对每个键值对递归调用此函数
    if isinstance(obj, dict):
        return {k: numpy_to_python(v) for k, v in obj.items()}
    
    # 如果对象是列表或元组，对每个元素递归调用此函数
    elif isinstance(obj, (list, tuple)):
        return type(obj)(numpy_to_python(v) for v in obj)
    
    # 如果对象是 NumPy 数组，将其转换为 Python 列表
    elif isinstance(obj, np.ndarray):
        return obj.tolist()
    
    # 如果对象是 NumPy 数据类型，转换为等效的 Python 数据类型
    elif isinstance(obj, (np.integer, np.floating, np.bool_)):
        return obj.item()
    
    # 如果对象是其他类型，直接返回该对象
    return obj


if __name__ == '__main__':
    
    # 示例使用
    data = {
        'a': np.array([1, 2, 3]),
        'b': np.float32(1.234),
        'c': {'d': np.int64(10)}
    }

    converted_data = numpy_to_python(data)
    print(converted_data)
